package com.bbseguros.pesquisador.action;

import java.io.File;
import java.util.List;
import java.util.Map;

import org.apache.log4j.Logger;

import com.bbseguros.pesquisador.bean.PesquisasBean;
import com.bbseguros.pesquisador.middle.PesquisasMiddle;
import com.bbseguros.pesquisador.util.Util;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class PesquisasAction extends ActionSupport {

	private static Logger logger = Logger.getLogger(PesquisasAction.class);

	private static final long serialVersionUID = 1L;
	private PesquisasBean pesquisa;
	private List<PesquisasBean> pesquisas;
	private File templateFile;
	private String functionType;
	private int[] pesquisasCkb;

	public void validate() {

		boolean verifyTemplateFile = true;
		if (getPesquisa() != null) {
			if (getPesquisa().getId() > 0 || pesquisasCkb != null) {
				logger.debug("Nao vou verificar o file");
				verifyTemplateFile = false;
			}
			
			if (getPesquisa().getNome() != null) {
				if (getPesquisa().getNome().length() == 0) {
					addFieldError("pesquisa.nome", getText("nome.required"));
				}
			}
			if (getPesquisa().getDescricao() != null) {
				if (getPesquisa().getDescricao().length() == 0) {
					addFieldError("pesquisa.descricao",
							getText("descricao.required"));
				}
			}

			if (getPesquisa().getTemplate() != null) {
				if (getPesquisa().getTemplate().length() == 0) {
					addFieldError("pesquisa.template",getText("template.required"));
				}
			} else {
				if (getTemplateFile() == null && verifyTemplateFile) {
						addFieldError("pesquisa.template",getText("templateFile.required"));
				}				
			}
		}
	}

	public String execute() {
		pesquisas = PesquisasMiddle.getAll();
		logger.debug("Execute Done!");
		
		return "viewAll";
	}

	public String novo() {
		setFunctionType("cadastro");
		logger.debug("Novo Done!");
		
		return "enterData";
	}

	public String edit() {
		setFunctionType("update");
		int pesqId = getPesquisa().getId();

		pesquisa = PesquisasMiddle.getPesquisa(pesqId);
		logger.debug("Edit " + pesqId + " Done!");
		return "enterData";
	}

	public String confirmData() {
		logger.debug("Id: " + pesquisa.getId());

		if (pesquisa.getNome() == null) {
			setFunctionType("delete");
			logger.debug("Recuperando Pesquisa");
			pesquisa = PesquisasMiddle.getPesquisa(pesquisa.getId());
		} else {
			if(pesquisa.getTemplate()==null) {
				pesquisa.setTemplate(Util.readFile(templateFile));
			}
		}
		Map<String, Object> session = ActionContext.getContext().getSession();
		session.put("pesquisa", pesquisa);
		
		logger.debug("Nome: " + pesquisa.getNome() + " Desc: " + pesquisa.getDescricao()+ " Template: " + pesquisa.getTemplate());
		return "confirmData";
	}

	public String insertConfirm() {
		Map<String, Object> session = ActionContext.getContext().getSession();
		pesquisa = (PesquisasBean)session.get("pesquisa");
		
		logger.debug("Id: " + pesquisa.getId());
		logger.debug("Nome: " + pesquisa.getNome() + " Desc: " + pesquisa.getDescricao()+ " Template: " + pesquisa.getTemplate());
		
		if (PesquisasMiddle.insertPesquisa(pesquisa)) {
			logger.debug("INSERT SUCCESS");
			return SUCCESS;
		} else {
			logger.debug("INSERT ERROR");
			addActionError(getText("pesquisas.insertError"));
			return ERROR;
		}
	}

	public String updateConfirm() {
		Map<String, Object> session = ActionContext.getContext().getSession();
		pesquisa = (PesquisasBean)session.get("pesquisa");

		logger.debug("Id: " + pesquisa.getId());
		logger.debug("Nome: " + pesquisa.getNome() + " Desc: " + pesquisa.getDescricao()+ " Template: " + pesquisa.getTemplate());

		if (PesquisasMiddle.updatePesquisa(pesquisa)) {
			logger.debug("UPDATE SUCCESS");
			return SUCCESS;
		} else {
			logger.debug("UPDATE ERROR");
			addActionError(getText("pesquisas.updateError"));
			return ERROR;
		}
	}

	public String deleteConfirm() {
		Map<String, Object> session = ActionContext.getContext().getSession();
		pesquisa = (PesquisasBean)session.get("pesquisa");
		
		if (PesquisasMiddle.deletePesquisa(pesquisa.getId())) {
			logger.debug("DELETE SUCCESS");
			return SUCCESS;
		} else {
			logger.debug("DELETE ERROR");
			
			addActionError(getText("pesquisas.deleteError"));
			return ERROR;
		}
	}

	public String deleteAll() {
		int ckbsize = getPesquisasCkb().length;
		logger.debug("Tamanho: " + ckbsize);
		
		pesquisas = PesquisasMiddle.getPesquisasById(getPesquisasCkb());
		logger.debug("Pesquisas localizadas: " + pesquisas.size());
		
		Map<String, Object> session = ActionContext.getContext().getSession();
		session.put("pesquisas", pesquisas);
		
		return "confirmDeleteAll";
	}

	public String deleteAllConfirm() {
		Map<String, Object> session = ActionContext.getContext().getSession();
		pesquisas = (List<PesquisasBean>) session.get("pesquisas");

		logger.debug("Pesquisas recuperadas: "+pesquisas.size());
		
		PesquisasBean bean = null;
		for (int i = 0; i < pesquisas.size(); i++) {
			bean = (PesquisasBean) pesquisas.get(i);
			if (PesquisasMiddle.deletePesquisa(bean.getId())) {
				logger.debug("DELETE SUCCESS " + bean.getId());
			} else {
				logger.debug("DELETE ERROR " + bean.getId());
			}
		}

		logger.debug("Delete All Confirm Done!");
		return SUCCESS;
	}

	public PesquisasBean getPesquisa() {
		return pesquisa;
	}

	public void setPesquisa(PesquisasBean pesquisa) {
		this.pesquisa = pesquisa;
	}

	public List<PesquisasBean> getPesquisas() {
		return pesquisas;
	}

	public void setPesquisas(List<PesquisasBean> pesquisas) {
		this.pesquisas = pesquisas;
	}

	public String getFunctionType() {
		return functionType;
	}

	public void setFunctionType(String functionType) {
		this.functionType = functionType;
	}

	public int[] getPesquisasCkb() {
		return pesquisasCkb;
	}

	public void setPesquisasCkb(int[] pesquisasCkb) {
		this.pesquisasCkb = pesquisasCkb;
	}

	public File getTemplateFile() {
		return templateFile;
	}

	public void setTemplateFile(File templateFile) {
		this.templateFile = templateFile;
	}
}
